GLX extended X servers make a subset of their visuals available for
OpenGL rendering. Drawables created with these visual can also be
rendered into using the core X renderer and or any other X extension that
is compatible with all core X visuals.
GLX extends a drawable's standard color buffer with additional buffers.
These buffers include back and auxiliary color buffers, a depth buffer, a
stencil buffer, and a color accumulation buffer. Some or all of the
buffers listed are included in each X visual that supports OpenGL.
GLX supports rendering into three types of drawables: windows, pixmaps
and pbuffers (pixel buffers). GLX windows and pixmaps are X resources,
and capable of accepting core X rendering as well as OpenGL rendering.
GLX pbuffers are GLX only resources, and might not accept core X
rendering.
To render using OpenGL into a GLX drawable, you must determine the
appropriate GLXFBConfig which supports the rendering features your
application requires. ggggllllXXXXCCCChhhhoooooooosssseeeeFFFFBBBBCCCCoooonnnnffffiiiigggg returns a GLXFBConfig matching
the required attributes, or NNNNUUUULLLLLLLL if no match is found. A complete list
of GLXFBConfigs supported by a server can be obtained by calling
ggggllllXXXXGGGGeeeettttFFFFBBBBCCCCoooonnnnffffiiiiggggssss. Attributes of a particular GLXFBConfig can be queried
by calling ggggllllXXXXGGGGeeeettttFFFFBBBBCCCCoooonnnnffffiiiiggggAAAAttttttttrrrriiiibbbb.
For GLX windows and pixmaps, a suitable X drawable (using either
XXXXCCCCrrrreeeeaaaatttteeeeWWWWiiiinnnnddddoooowwww or XXXXCCCCrrrreeeeaaaatttteeeePPPPiiiixxxxmmmmaaaapppp, respectively) with a matching visual must
be created first. Call ggggllllXXXXGGGGeeeettttVVVViiiissssuuuuaaaallllFFFFrrrroooommmmFFFFBBBBCCCCoooonnnnffffiiiigggg to obtain the necessary
XVisualInfo structure for creating the X drawable. For pbuffers, no
underlying X drawable is required.
To create a GLX window from an X window, call ggggllllXXXXCCCCrrrreeeeaaaatttteeeeWWWWiiiinnnnddddoooowwww. Likewise,
to create a GLX pixmap, call ggggllllXXXXCCCCrrrreeeeaaaatttteeeePPPPiiiixxxxmmmmaaaapppp. Pbuffers are created by
calling ggggllllXXXXCCCCrrrreeeeaaaatttteeeePPPPbbbbuuuuffffffffeeeerrrr. Use ggggllllXXXXDDDDeeeessssttttrrrrooooyyyyWWWWiiiinnnnddddoooowwww, ggggllllXXXXDDDDeeeessssttttrrrrooooyyyyPPPPiiiixxxxmmmmaaaapppp, and
ggggllllXXXXDDDDeeeessssttttrrrrooooyyyyPPPPbbbbuuuuffffffffeeeerrrr to release previously allocated resources.
A GLX context is required to bind OpenGL rendering to a GLX resource. A
GLX resource and rendering context must have compatible GLXFBConfigs. To
create a GLX context, call ggggllllXXXXCCCCrrrreeeeaaaatttteeeeNNNNeeeewwwwCCCCoooonnnntttteeeexxxxtttt. A context may be bound
to a GLX drawable by using ggggllllXXXXMMMMaaaakkkkeeeeCCCCoooonnnntttteeeexxxxttttCCCCuuuurrrrrrrreeeennnntttt. This context/drawable
pair becomes the current context and current drawable, and is used by all
ggggllllXXXXIIIImmmmppppoooorrrrttttCCCCoooonnnntttteeeexxxxttttEEEEXXXXTTTT, and ggggllllXXXXFFFFrrrreeeeeeeeCCCCoooonnnntttteeeexxxxttttEEEEXXXXTTTT.
The EEEEXXXXTTTT____vvvviiiissssuuuuaaaallll____rrrraaaattttiiiinnnngggg extension allows servers to identify a particular
GLX visual as undesirable. A new visual attribute is introduced,
providing a way for servers to specify caveats (e.g., slow or non-
conformant) for a visual. The attribute may be queried using
ggggllllXXXXGGGGeeeettttCCCCoooonnnnffffiiiigggg; it is also used by ggggllllXXXXCCCChhhhoooooooosssseeeeVVVViiiissssuuuuaaaallll to discriminate against
visuals with caveats.
This extension allows servers to export visuals with improved features or
image quality, but lower performance or greater system burden, without
having to have these visuals selected preferentially.
The EEEEXXXXTTTT____vvvviiiissssuuuuaaaallll____iiiinnnnffffoooo extension allows the user to request a particular X
visual type to be associated with a GLX visual, and allows the user to
query the X visual type underlying a GLX visual. In addition, this
extension provides a means to request a visual with a transparent pixel
and to query whether a visual supports a transparent pixel value and the
value of the transparent pixel.
The SSSSGGGGIIIIXXXX____ffffbbbbccccoooonnnnffffiiiigggg extension introduces a new way to describe the
capabilities of a GLX drawable (i.e., to describe the depth of color
buffer components and the type and size of ancillary buffers), removes
the "similarity" requirement when making a context current to a drawable,
and supports RGBA rendering to one- and two-component Windows and GLX
Pixmaps. For more information see ggggllllXXXXGGGGeeeettttFFFFBBBBCCCCoooonnnnffffiiiiggggAAAAttttttttrrrriiiibbbbSSSSGGGGIIIIXXXX,
The SSSSGGGGIIIIXXXX____ppppbbbbuuuuffffffffeeeerrrr extension defines GLX pixel buffers, which are
additional non-visible rendering buffers for an OpenGL renderer. GLX
pixel buffers are typically allocated in non-visible frame buffer memory.
They are intended to be "static" resources, in that a program will
typically allocate them only once, rather than as a part of its rendering
loop. Also the frame buffer resources that are associated with a GLX
pixel buffer are static, and are deallocated only when the GLXPbuffer is
destroyed, or, in the case of a _u_n_p_r_e_s_e_r_v_e_d GLX pixel buffer, as a result
of X server activity that changes its frame buffer requirements. For
more information see ggggllllXXXXCCCCrrrreeeeaaaatttteeeeGGGGLLLLXXXXPPPPbbbbuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX, ggggllllXXXXDDDDeeeessssttttrrrrooooyyyyGGGGLLLLXXXXPPPPbbbbuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX,
SSSSGGGGIIIIXXXX____ppppbbbbuuuuffffffffeeeerrrr is only supported on RRRReeeeaaaalllliiiittttyyyyEEEEnnnnggggiiiinnnneeee, RRRReeeeaaaalllliiiittttyyyyEEEEnnnnggggiiiinnnneeee2222, and VVVVTTTTXXXX
systems, IIIInnnnffffiiiinnnniiiitttteeeeRRRReeeeaaaalllliiiittttyyyy systems, SSSSoooolllliiiidddd IIIImmmmppppaaaacccctttt systems, HHHHiiiigggghhhh IIIImmmmppppaaaacccctttt and
MMMMaaaaxxxxiiiimmmmuuuummmm IIIImmmmppppaaaacccctttt systems, OOOO2222 systems, and OOOOccccttttaaaannnneeee2222 VVVVPPPPrrrroooo systems.
The SSSSGGGGIIIIXXXX____ddddmmmm____ppppbbbbuuuuffffffffeeeerrrr extension, with the addition of a DigitalMedia
attribute, defines a type of GLX pixel buffer that can acquire one or
more of its renderable buffers from a DMbuffer generated by video,
compression, or other media library. A single DigitalMedia pixel buffer
can be associated with a sequence of DMbuffers having the same
configuration, making them directly OpenGL readable and renderable.
Frame buffer resources that are not acquired from the DMbuffer are
identical to those of a standard GLX pixel buffer. For more information
see ggggllllXXXXCCCCrrrreeeeaaaatttteeeeGGGGLLLLXXXXPPPPbbbbuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX, ggggllllXXXXAAAAssssssssoooocccciiiiaaaatttteeeeDDDDMMMMPPPPbbbbuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX, DDDDMMMMbbbbuuuuffffffffeeeerrrr,
ddddmmmmBBBBuuuuffffffffeeeerrrrGGGGeeeettttGGGGLLLLPPPPoooooooollllPPPPaaaarrrraaaammmmssss. SSSSGGGGIIIIXXXX____ddddmmmm____ppppbbbbuuuuffffffffeeeerrrr is only supported on OOOO2222
systems.
The SSSSGGGGIIIISSSS____mmmmuuuullllttttiiiissssaaaammmmpppplllleeee extension provides a mechanism to antialias all
primitives. (This extension is described in more detail in ggggllllIIIInnnnttttrrrroooo.) In
order to support multisampling both GLX and OpenGL had to be extended.
The GLX portion of the extension, designated as GGGGLLLLXXXX____SSSSGGGGIIIISSSS____mmmmuuuullllttttiiiissssaaaammmmpppplllleeee,
includes new visual attributes which can be specified when calling
ggggllllXXXXCCCChhhhoooooooosssseeeeVVVViiiissssuuuuaaaallll and ggggllllXXXXGGGGeeeettttCCCCoooonnnnffffiiiigggg. SSSSGGGGIIIISSSS____mmmmuuuullllttttiiiissssaaaammmmpppplllleeee is only supported on
RRRReeeeaaaalllliiiittttyyyyEEEEnnnnggggiiiinnnneeee, RRRReeeeaaaalllliiiittttyyyyEEEEnnnnggggiiiinnnneeee2222, and VVVVTTTTXXXX systems, and IIIInnnnffffiiiinnnniiiitttteeeeRRRReeeeaaaalllliiiittttyyyy
systems.
The SSSSGGGGIIII____mmmmaaaakkkkeeee____ccccuuuurrrrrrrreeeennnntttt____rrrreeeeaaaadddd extension allows OpenGL pixel operations to
read pixel data from the buffers of one drawable and draw into the
buffers of another. For example, pixels can be copied from one window
into another, or from a GLX pixel buffer into a window. For more
information see ggggllllXXXXMMMMaaaakkkkeeeeCCCCuuuurrrrrrrreeeennnnttttRRRReeeeaaaaddddSSSSGGGGIIII and ggggllllXXXXGGGGeeeettttCCCCuuuurrrrrrrreeeennnnttttRRRReeeeaaaaddddDDDDrrrraaaawwwwaaaabbbblllleeeeSSSSGGGGIIII.
SSSSGGGGIIII____mmmmaaaakkkkeeee____ccccuuuurrrrrrrreeeennnntttt____rrrreeeeaaaadddd is only supported on RRRReeeeaaaalllliiiittttyyyyEEEEnnnnggggiiiinnnneeee, RRRReeeeaaaalllliiiittttyyyyEEEEnnnnggggiiiinnnneeee2222,
and VVVVTTTTXXXX systems, IIIInnnnffffiiiinnnniiiitttteeeeRRRReeeeaaaalllliiiittttyyyy systems, SSSSoooolllliiiidddd IIIImmmmppppaaaacccctttt systems, HHHHiiiigggghhhh
IIIImmmmppppaaaacccctttt and MMMMaaaaxxxxiiiimmmmuuuummmm IIIImmmmppppaaaacccctttt systems, OOOO2222 systems, and OOOOccccttttaaaannnneeee2222 VVVVPPPPrrrroooo systems.
The SSSSGGGGIIIIXXXX____vvvviiiiddddeeeeoooo____ssssoooouuuurrrrcccceeee extension allows pixel data to be sourced from a
video input stream. It defines a new type of drawable,
GLXVideoSourceSGIX, that represents the drain node of a Video Library
(VL) path. A GLXVideoSourceSGIX may be passed as a parameter to
ggggllllXXXXMMMMaaaakkkkeeeeCCCCuuuurrrrrrrreeeennnnttttRRRReeeeaaaaddddSSSSGGGGIIII to indicate that pixel data should be read from the
specified video source instead of from the framebuffer. For more
information, see ggggllllXXXXCCCCrrrreeeeaaaatttteeeeGGGGLLLLXXXXVVVViiiiddddeeeeooooSSSSoooouuuurrrrcccceeeeSSSSGGGGIIIIXXXX and
ggggllllXXXXDDDDeeeessssttttrrrrooooyyyyGGGGLLLLXXXXVVVViiiiddddeeeeooooSSSSoooouuuurrrrcccceeeeSSSSGGGGIIIIXXXX. SSSSGGGGIIIIXXXX____vvvviiiiddddeeeeoooo____ssssoooouuuurrrrcccceeee is only supported on
RRRReeeeaaaalllliiiittttyyyyEEEEnnnnggggiiiinnnneeee, RRRReeeeaaaalllliiiittttyyyyEEEEnnnnggggiiiinnnneeee2222, and VVVVTTTTXXXX systems, and IIIInnnnffffiiiinnnniiiitttteeeeRRRReeeeaaaalllliiiittttyyyy
systems.
The SSSSGGGGIIIIXXXX____vvvviiiiddddeeeeoooo____rrrreeeessssiiiizzzzeeee extension allows the frame buffer to be resized to
the output resolution of the video channel when ggggllllXXXXSSSSwwwwaaaappppBBBBuuuuffffffffeeeerrrrssss is called
for the window that is bound to the video channel. SSSSGGGGIIIIXXXX____vvvviiiiddddeeeeoooo____rrrreeeessssiiiizzzzeeee is
only supported on IIIInnnnffffiiiinnnniiiitttteeeeRRRReeeeaaaalllliiiittttyyyy systems.
All supported GLX extensions will have a corresponding definition in
glx.h and a token in the extension string returned by
ggggllllXXXXQQQQuuuueeeerrrryyyyEEEExxxxtttteeeennnnssssiiiioooonnnnssssSSSSttttrrrriiiinnnngggg. For example, if the EEEEXXXXTTTT____vvvviiiissssuuuuaaaallll____iiiinnnnffffoooo extension
is supported, then this token will be defined in glx.h and
EEEEXXXXTTTT____vvvviiiissssuuuuaaaallll____iiiinnnnffffoooo will appear in the extension string returned by
ggggllllXXXXQQQQuuuueeeerrrryyyyEEEExxxxtttteeeennnnssssiiiioooonnnnssssSSSSttttrrrriiiinnnngggg. The definitions in glx.h can be used at compile
time to determine if procedure calls corresponding to an extension exist
in the library.
OpenGL itself is capable of being extended. Refer to ggggllllIIIInnnnttttrrrroooo for more
GLX 1.3 is now supported, and is backward compatible with GLX 1.1 and GLX
1.2. It introduces new functionality (namely GLXFBConfigs) that
supersedes the GLX 1.2 functionality. GLX 1.2 commands are supported,
but their use in new application development is not recommended.
GLX 1.3 corresponds to OpenGL versions 1.2, and introduces the following
new calls: ggggllllXXXXGGGGeeeettttFFFFBBBBCCCCoooonnnnffffiiiiggggssss, ggggllllXXXXGGGGeeeettttFFFFBBBBCCCCoooonnnnffffiiiiggggAAAAttttttttrrrriiiibbbb,
GLX 1.2 corresponds to OpenGL version 1.1 and introduced the following
new call: ggggllllXXXXGGGGeeeettttCCCCuuuurrrrrrrreeeennnnttttDDDDiiiissssppppllllaaaayyyy.
GLX 1.1 corresponds to OpenGL version 1.0 and introduces the following
new calls: ggggllllXXXXQQQQuuuueeeerrrryyyyEEEExxxxtttteeeennnnssssiiiioooonnnnssssSSSSttttrrrriiiinnnngggg, ggggllllXXXXQQQQuuuueeeerrrryyyySSSSeeeerrrrvvvveeeerrrrSSSSttttrrrriiiinnnngggg, and